package com.todo.event.activity.infrastructure.repository;

import com.todo.common.common.entity.response.page.PageResult;
import com.todo.event.activity.common.enums.EventDetailStatusEnum;
import com.todo.event.activity.infrastructure.entity.condition.EventInfoCondition;
import com.todo.event.activity.infrastructure.entity.domain.EventDetailDO;
import com.todo.event.activity.infrastructure.entity.po.EventInfoPO;

import java.util.List;

/**
 * @author azhebuxing
 * @date 2025/1/7 09:25
 * @description
 */
public interface EventDetailRepository {

    /**
     * 新增事件活动详情
     *
     * @param eventDetailDO
     * @return
     */
    Boolean insertEventDetail(EventDetailDO eventDetailDO);

    /**
     * 根据主键查询事件活动详情
     *
     * @param id
     * @return
     */
    EventDetailDO queryEventDetail(Long id);

    /**
     * 根据活动编码查询事件活动详情
     *
     * @param eventCode
     * @return
     */
    EventDetailDO queryEventDetailByCode(String eventCode);

    /**
     * 检查事件名称是否已存在
     *
     * @param eventName
     * @return
     */
    Boolean checkEventNameExist(String eventName);

    /**
     * 更新事件活动详情
     *
     * @param eventDetailDO
     * @return
     */
    Boolean updateEventDetail(EventDetailDO eventDetailDO);

    /**
     * 根据主键删除事件活动详情
     *
     * @param id
     * @return
     */
    Boolean removeEventDetailById(Long id);

    /**
     * 分页查询事件活动详情
     *
     * @param eventInfoCondition
     * @return
     */
    PageResult<EventInfoPO> queryEventInfoPageByCondition(EventInfoCondition eventInfoCondition);

    /**
     * 更新事件活动详情状态
     *
     * @param id
     * @param oldStatus
     * @param newStatus
     * @return
     */
    Boolean updateEventDetailStatus(Long id, EventDetailStatusEnum oldStatus, EventDetailStatusEnum newStatus);

    /**
     * 根据主题名称和标签查询事件活动详情
     *
     * @param topicName
     * @param tag
     * @return
     */
    List<EventDetailDO> queryEventDetailByTopic(String topicName, String tag);
}
